# 可以直接作用于for循环的一类是list、tuple、dict、set、str，另一类是generator。这些对象统称为可迭代对象：Iterable。
# 可以直接作用于next()的对象称为迭代器：Iterator。迭代器既可以作用于for循环，还可以被next()函数不断调用并返回下一个值，
# 直到最后抛出StopIteration错误表示无法继续返回下一个值了。


'''
生成器都是Iterator对象，但list、dict、str虽然是Iterable，却不是Iterator。

把list、dict、str等Iterable变成Iterator可以使用iter()函数：
'''

from collections.abc import Iterator

a = isinstance(iter([]),Iterator)

b = isinstance(iter('abc'),Iterator)

print(a)
print(b)


print("Python的for循环本质上就是通过不断调用next()函数实现的，例如：")
for x in [1,2,3,4,5]:
    print(x)


print("实际上完全等价于：")
it = iter([1,2,3,4,5])
while True:
    try:
        x = next(it)
        print(x)
    except StopIteration:
        break



